package main

import (
	"gitee.com/huhong/netbolt"
	"github.com/boltdb/bolt"
	"google.golang.org/grpc"
	_ "google.golang.org/grpc/encoding/gzip"
)

func tryRollback(tx *bolt.Tx, err error, panic bool) {
	if err != nil {
		tx.Rollback()
		if panic {

			netbolt.ErrLog.Panic(err)
		} else {
			netbolt.ErrLog.Println(err)
		}
	}

}

func main() {
	netbolt.InitDB()
	//LIS, err := net.Listen("tcp", netbolt.NetBoltConfig.Netbolt.Listen)

	//var interceptor grpc.UnaryServerInterceptor = func(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) {
	//
	//	md, ok := metadata.FromIncomingContext(ctx)
	//	if !ok {
	//		return nil, errors.New("未验证!")
	//
	//	} else {
	//		myId, ok := md["myid"]
	//		if !ok {
	//			return nil, errors.New("未验证!")
	//		}
	//		fmt.Printf("myid:%s\n", myId)
	//	}
	//	return handler(ctx, req)
	//
	//}
	//var interceptor grpc.StreamServerInterceptor
	//interceptor = func(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error {
	//	{
	//		fmt.Println(srv)
	//		fmt.Println(info)
	//		return nil
	//	}
	//}
	gs := grpc.NewServer(grpc.MaxRecvMsgSize(20 * 1024 * 1024))

	netbolt.RegisterNetBoltServiceServer(gs, &netbolt.NetBoltService{})
	go gs.Serve(netbolt.LIS)

	netbolt.InitCloud()
	netbolt.Logger.Printf("Running at Tcp:%s\n", netbolt.NetBoltConfig.Netbolt.Listen)

	select {
	case s := <-netbolt.Oschan:
		netbolt.WARNLog.Println("Bye!!")

		netbolt.UpdateDatabases()
		//netbolt.ZkConn.Close()
		netbolt.CloseAllDatabases()

		s.Signal()
		break
	}

	//fmt.Println("running!")
	//db, err := bolt.Open("dbstore/sys/sys.db", 0600, nil)
	//defer db.Close()
	//if err != nil {
	//	log.Panic(err)
	//}
	//key := []byte("huhong")
	//
	//slotnum := netbolt.CRC_CCITT(key) % netbolt.SLOT_COUNT
	//
	//slotname := strconv.Itoa(int(slotnum))
	//tx, err := db.Begin(true)
	//
	//if err != nil {
	//	log.Panic(err)
	//}
	//
	//bucket, err := tx.CreateBucketIfNotExists([]byte(slotname))
	//bucket.Put(key, []byte("hello bolt"))
	//tx.Commit()
	//tx, err = db.Begin(true)
	//
	//if err != nil {
	//	log.Panic(err)
	//}
	//
	//bucket, _ = tx.CreateBucketIfNotExists([]byte(slotname))
	//bucket.Put(key, []byte("hello bolt"))
	//tx.Commit()
	//fmt.Println("bye!")
}
